package study.Day_seven;

/**
 * @Classname: Day_seven
 * @Description: leetcode第七题
 * @Date: 2021/10/9
 * @Author: huwei
 * <p>
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围就返回 0。
 * <p>
 * 示例 1：
 * 输入：x = 123
 * 输出：321
 * <p>
 * 示例 2：
 * 输入：x = -123
 * 输出：-321
 * <p>
 * 示例 3：
 * 输入：x = 120
 * 输出：21
 * <p>
 * 示例 4：
 * 输入：x = 0
 * 输出：0
 */
public class Day_seven {
    // region 普通方法
    public int reverse(int x) {
        if (x == 0) {
            return x;
        } else if (x > 0) {
            return formatInt(x);
        } else {
            x = -x;
            return -formatInt(x);
        }
    }

    public int formatInt(int x) {
        String s = String.valueOf(x);
        StringBuilder sbuilder = new StringBuilder();
        for (int i = s.length()-1; i >= 0; i--) {
            if(s.charAt(i) == 0){
                continue;
            }
            sbuilder.append(s.charAt(i));
        }
        int i;
        try {
            i = Integer.parseInt(sbuilder.toString());
        }catch (Exception e){
            return 0;
        }
        return i;
    }
    // endregion

    // region 高效方法
    public int bestReverse(int x){
        long n = 0;
        while(x != 0) {
            // 原来的n的值x10+取数值的最后一个数字,赋值给n
            n = n*10 + x%10;
            // 每循环一次就去掉一位数,直到除数为0
            x = x/10;
        }
        return (int)n==n? (int)n:0;
    }
    // endregion
}
